# chapter 3 种子生成器自动生成代码

from openai import OpenAI
key = "" #换成你的key
url = "" # 换成你的url
model_name = "" # 换成你的模型名，建议使用qwen3-32b以上的模型
def print_llm(text):
    print(text, end="", flush=True)
def run_llm(prompt_str):
    result = ""
    client = OpenAI(api_key=key, base_url=url)
    response = client.chat.completions.create(
        model=model_name,
                    messages=[
                        {"role": "user", "content": prompt_str},
                    ],
                    stream=True,
                    # 把timeout值设置高一些
                    timeout=600
                )
    for chunk in response:
        content = chunk.choices[0].delta.content
        if content is not None:
            result += content
            print_llm(content)
    return result

def extract_python_code(prompt_str):
    import re
    python_code = re.findall(r"```python(.*?)```", prompt_str, re.DOTALL)[0]
    return python_code

wrapper_code = """

target_floder = "./j40/corpus"
run(target_floder, 40)
"""

# 生成特性
feature_prompt_str = """根据你对jxl图像知识，列出jxl图像在文件格式上的10种算法特性。
    \\no_think
    """
feature_result = run_llm(feature_prompt_str)

# 生成python代码

code_gen_prompt_str = f"""根据下面的jxl格式要求，写一个Python脚本，用来生成满足下面要求的jxl文件,要求要使用pillow_jxl库。
要求：1.输出的文件夹要用户指定。
2. 输出的函数接口名为run,里面要有输出文件夹、输出文件数量参数两个参数。
3. 整个程序只有一个run函数，所有生成逻辑都要放到run函数中。
4. 除了pillow_jxl库外，只能使用struct，numpy,os,sys库，严禁使用其他库。
5. 不需要加入日志或者其他与生成jxl文件无关的功能。
6. 不要加入任何调用run函数的示例代码。

{feature_result}
生成的代码是python代码：
```python
//代码放到这里
```
\\no_think
"""
result = run_llm(code_gen_prompt_str)
python_code = extract_python_code(result)

print("\n"*5)
print("生成的代码是：")
print(python_code)

# 自动化流程，运行代码
run_code = python_code + wrapper_code

exec(run_code)